package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.CategoryMapper;
import cn.tedu.csmall.product.pojo.dto.CategoryAddNewDTO;
import cn.tedu.csmall.product.pojo.entity.Category;
import cn.tedu.csmall.product.pojo.vo.CategoryListitemVO;
import cn.tedu.csmall.product.pojo.vo.CategoryStandardVO;
import cn.tedu.csmall.product.service.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@Service
public class CategoryServiceImpl implements ICategoryService {

    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public void addNew(CategoryAddNewDTO categoryAddNewDTO) {
        log.debug("开始处理【添加类别】的业务，参数：{}", categoryAddNewDTO);
        //添加类别之前先查询是否有这个类别,根据名称查询
        String name = categoryAddNewDTO.getName();
        int countByName = categoryMapper.countByName(name);
        log.debug("尝试添加的类别名称是：{}，在数据库中此名称的类别数量为：{}", name, countByName);
        //判断是否存在
        if(countByName > 0){
            // 是：类别名称已经存在，抛出RuntimeException异常
            String message = "添加类别失败！类别名称【" + name + "】已存在！";
            log.warn(message);
            throw new ServiceException(ERR_CONFLICT,message);
        }
        //获取当前时间
        LocalDateTime now = LocalDateTime.now();
        Category category = new Category();
        //补全category对象的属性值：
        BeanUtils.copyProperties(categoryAddNewDTO,category);
        category.setGmtCreate(now);
        category.setGmtModified(now);
        //执行插入数据
        int rows = categoryMapper.insert(category);
        if(rows !=1){
            String message = "添加类别失败！服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ERR_INSERT,message);
        }
    }

    @Override
    public void deleteById(Long id) {
        log.debug("开始处理【删除类别】的业务，参数：{}", id);
        //检查要删除的类别是否存在
        CategoryStandardVO standardById = categoryMapper.getStandardById(id);
        if(standardById == null){
            throw new ServiceException(ERR_NOT_FOUND,"删除失败，尝试访问的数据不存在");
        }
        //执行删除操作
        log.debug("即使删除id为{}的类别……", id);
        int rows = categoryMapper.deleteById(id);
        if(rows != 1){
            throw new ServiceException(ERR_DELETE,"删除失败，服务器忙，请稍后再次尝试！");
        }
        log.debug("删除完成！");
    }

    @Override
    public List<CategoryListitemVO> listData(Long parentId) {
        List<CategoryListitemVO> categoryDataList = categoryMapper.getCategoryDataList(parentId);
        return categoryDataList;
    }


}
